/**
 * 
 */

package com.gustozzi.distribucion.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.gustozzi.distribucion.action.util.Constantes;
import com.gustozzi.distribucion.negocio.CobranzaBO;
import com.gustozzi.distribucion.negocio.impl.CobranzaBOImpl;
import com.gustozzi.domain.OrdenCobranza;
import com.gustozzi.domain.Pago;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author FABRIZIO
 * 
 */
public class PagoAction extends ActionSupport implements ServletRequestAware
{
    private static final long serialVersionUID = 1L;
    CobranzaBO cobranzaBO = new CobranzaBOImpl();
    private String botonSeleccionado;
    private Pago pago;
    private List<Pago> listaPagos;
    private List<OrdenCobranza> listaOrdenes;
    private String codigoSeleccionado;
    private HttpServletRequest request;

    public String execute()
    {
        String destino = Constantes.CADENA_VACIA;
        if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_FILTRAR))
        {
            destino = obtenerListaPagos();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_NUEVO))
        {
            destino = nuevoPago();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_VERORDENESCOBRANZA))
        {
            destino = verOrdenesCobranza();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_ELIMINAR))
        {
            destino = eliminarPago();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_EDITAR))
        {
            destino = editarPago();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_LIBERARORDEN))
        {
            destino = liberarOrden();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_GUARDAR))
        {
            destino = guardarPago();
        }
        else
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String obtenerListaPagos()
    {
        String destino = "";
        List<Pago> lista = null;
        try
        {
            String codigo = pago.getOrdenCobranza().getCodigo();
            String documentoCliente = pago.getOrdenCobranza().getCliente().getNumero();
            String fechaDesde = pago.getFechaDesde();
            String fechaHasta = pago.getFechaHasta();

            lista = new ArrayList<Pago>();
            lista = cobranzaBO.obtenerListaPagos(codigo, documentoCliente, fechaDesde, fechaHasta);
            this.setListaPagos(lista);
            request.getSession().setAttribute(Constantes.LISTAPAGOSESSION, lista);
            destino = Constantes.CONSULTARPAGO;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String nuevoPago()
    {
        pago.setCodigo("TEMP");
        String destino = Constantes.NUEVOPAGO;
        return destino;
    }

    public String verOrdenesCobranza()
    {
        String destino = Constantes.CADENA_VACIA;
        try
        {
            destino = Constantes.VERORDENESCOBRANZA;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    @SuppressWarnings("unchecked")
    public String eliminarPago()
    {
        String destino = Constantes.CADENA_VACIA;
        String codigo = codigoSeleccionado;
        try
        {
            List<Pago> lista = (ArrayList<Pago>) request.getSession().getAttribute(Constantes.LISTAPAGOSESSION);
            for (int i = 0; i < lista.size(); i++)
            {
                Pago pago = (Pago) lista.get(i);
                if (pago.getCodigo().equalsIgnoreCase(codigo))
                {
                    lista.remove(i);
                    break;
                }
                request.getSession().setAttribute(Constantes.LISTAPAGOSESSION, lista);
                setListaPagos(lista);
            }
            destino = Constantes.CONSULTARPAGO;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String editarPago()
    {
        pago.setCodigo("1");
        pago.setFechaPago("18/03/2012");
        pago.setMontoPagado("1500.00");

        List<OrdenCobranza> lista = new ArrayList<OrdenCobranza>();
        OrdenCobranza ordenCobranza = new OrdenCobranza();
        ordenCobranza.setCodigo("1");
        ordenCobranza.setFechaCobranza("18/03/2012");
        lista.add(ordenCobranza);
        setListaOrdenes(lista);
        request.getSession().setAttribute("listaOrdenesSession", lista);
        String destino = Constantes.NUEVOPAGO;
        return destino;
    }

    @SuppressWarnings("unchecked")
    public String liberarOrden()
    {
        String destino = "";
        List<OrdenCobranza> lista = null;
        String codigo = codigoSeleccionado;
        pago.setCodigo("1");
        pago.setMontoPagado("1500.00");
        try
        {
            lista = (ArrayList<OrdenCobranza>) request.getSession().getAttribute("listaOrdenesSession");
            for (int i = 0; i < lista.size(); i++)
            {
                OrdenCobranza orden = lista.get(i);
                if (orden.getCodigo().equalsIgnoreCase(codigo))
                {
                    lista.remove(i);
                    break;
                }
            }
            setListaOrdenes(lista);
            request.getSession().setAttribute("listaOrdenesSession", lista);
            destino = Constantes.NUEVOPAGO;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }
    
    public String guardarPago()
    {
        String destino = Constantes.CADENA_VACIA;
        try
        {
            destino = Constantes.CONSULTARPAGO;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    @Override
    public void setServletRequest(HttpServletRequest request)
    {
        this.request = request;
    }

    /**
     * @return the botonSeleccionado
     */
    public String getBotonSeleccionado()
    {
        return botonSeleccionado;
    }

    /**
     * @param botonSeleccionado
     *            the botonSeleccionado to set
     */
    public void setBotonSeleccionado(String botonSeleccionado)
    {
        this.botonSeleccionado = botonSeleccionado;
    }

    /**
     * @return the codigoSeleccionado
     */
    public String getCodigoSeleccionado()
    {
        return codigoSeleccionado;
    }

    /**
     * @param codigoSeleccionado
     *            the codigoSeleccionado to set
     */
    public void setCodigoSeleccionado(String codigoSeleccionado)
    {
        this.codigoSeleccionado = codigoSeleccionado;
    }

    /**
     * @return the pago
     */
    public Pago getPago()
    {
        return pago;
    }

    /**
     * @return the listaPagos
     */
    public List<Pago> getListaPagos()
    {
        return listaPagos;
    }

    /**
     * @return the listaOrdenesCobranza
     */
    public List<OrdenCobranza> getListaOrdenes()
    {
        return listaOrdenes;
    }

    /**
     * @param pago
     *            the pago to set
     */
    public void setPago(Pago pago)
    {
        this.pago = pago;
    }

    /**
     * @param listaPagos
     *            the listaPagos to set
     */
    public void setListaPagos(List<Pago> listaPagos)
    {
        this.listaPagos = listaPagos;
    }

    /**
     * @param listaOrdenesCobranza
     *            the listaOrdenesCobranza to set
     */
    public void setListaOrdenes(List<OrdenCobranza> listaOrdenes)
    {
        this.listaOrdenes = listaOrdenes;
    }
}